Giter Site home page Giter Site logo

adober's People

Contributors

randyzwitch avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

adober's Issues

Remove individual methods in lieu of bulk?

Consider removing all of the one-off methods for specifying a single id or tag in a function. For example, the chances of a user being able to pass in the internal id for a calculated metric is probably outweighed by the greatly simplified code of not supporting it.

With bulk download, users can build implementation documentation, but without being able to specify a single id, the request payload will be slightly larger (which is likely only a problem for building a UI)

Figure out pagination

In #8, adding kwargs for pagination, but it's not clear that user would know to keep sending requests. Could potentially re-write functions to automatically paginate, but would need to read result to see if a next parameter passed

  • GetCalculatedMetrics
  • GetDateRanges
  • GetReportSuites
  • GetSegments
  • GetUsers

Add return code checking to OAuth

In general, OAuth needs to be tightened up a lot. Need to check a valid return happens, so that when credentials already exist they aren't actually expired

Clean up OAuth (add auto-refresh, etc)

Related to #3

Currently, Adobe doesn't allow refreshing of tokens. When Adobe supports refreshing tokens, check for expired token, then refresh tokens to avoid needing to constantly authenticate via web process

Figure out JWT authentication

Understand what JWT (JSON Web Tokens) are and if this eliminates need to do webpage based authentication.

JWT appears to be the way to have a service account, so that no human intervention necessary. Workflow seems to be placing a private key into adobe.io, which creates a JWT; JWT gets passed back and forth?

If this is how it works, will need to figure out how to use same private key on Travis to enable CI.

Validate data.frame methods in presence of expansion keyword

As part of #8, a field expansion can be added, which adds more fields to the response. Because of auto-parsing in current functionality, these added fields will not parse well.

Consider how to parse these fields so that data frames come out correctly.

Set expansion arg to the set of values that get put cleanly into a data frame.

  • CalculatedMetrics: reportSuiteName, ownerFullName, modified, tags, definition, compatibility
  • Collections (ReportSuite): name, parentRsid, currency, calendarType, timezoneZoneinfo
  • DateRanges: definition, ownerFullName, modified, tags
  • Dimensions: tags
  • Metrics: tags
  • GetSegments: reportSuiteName, ownerFullName, modified, tags, compatibility, definition
  • Add note in each function to the effect of "expansion parameter defaults to arguments that parse cleanly as data.frame; see docs for full set of args"

Improve docstrings

Docstrings are completely minimal, write docstrings for every function

Add remaining keyword arguments

Migrate existing code to use query parameter for building urls, then add additional keyword arguments shown for Swagger interface

  • CalculatedMetrics
  • Collections (GetReportSuites...simplify by removing rsid vs rsids?)
  • DateRanges
  • Dimensions
  • Metrics
  • Users
  • Segments

Catch missing OAuth token

When AdobeRInternals$auth not present, function calls return Bad URL, colon is first character curl error, which is unfortunate. Test that values are not null before making curl request, so that error message can suggest calling AdobeOAuth

Implement Segments API

Supersedes #11

Segments API covered here:
https://github.com/AdobeDocs/analytics-2.0-apis/blob/master/segments-guide.md
https://github.com/AdobeDocs/analytics-2.0-apis/blob/master/segments.md

It appears that Adobe really doesn't want people to programmatically create segments, instead suggesting users defer to using the UI. This looks like something to consider when building out this library; deleting segments probably pretty simple and useful for bulk removing of segments. Creating and Updating segments possibly a bit less so

Implement Freeform Table from Reports API

Supersedes #11

The reports endpoint is described here:
https://github.com/AdobeDocs/analytics-2.0-apis/blob/master/reporting-guide.md
https://github.com/AdobeDocs/analytics-2.0-apis/blob/master/reporting-multiple-breakdowns.md

How to set up debugger:
https://github.com/AdobeDocs/analytics-2.0-apis/blob/master/reporting-tricks.md

In general, it seems that multiple breakdowns requires walking over a set of reports, which is undesirable in a language like R. Will need to decide how to make separate functions for types of reports (time-series, ranked, etc.)

  • anomaly detection, includePercentChange as kwarg
  • anomaly detection, includePercentChange custom parsing for data frame
  • auto-sort based on presence of daterange in dimension and/or anomalyDetection = TRUE
  • create globalFilters kwarg
  • create globalFilters function (validate if all filters have same structure)
  • refactor globalFilters
  • locale function
  • search function
  • evaluate remaining settings
  • statistics function
  • metricContainer: evaluate all
  • rowContainer
  • anchorDate
  • remaining input assertions

Check input types using assertions

Since R doesn't have type signatures, check types. Use assertthat or similar

  • AdobeOAuth
  • GetUserCompanyAccess
  • GetCalculatedMetrics
  • Collections
  • DateRanges
  • Dimensions
  • Metrics
  • Users
  • Segments

Don't return JSON?

More I'm thinking about it, giving the choice of returning the raw data instead of just a table might not make any sense. In the end, R still inconvenient as hell to work with JSON, so what might people be wanting to do who use R AND still want to have something that's not a data frame?

Clean up dev hacks

Go through code and remove any global assignments, debugging statements, function exports, etc.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.